public class add2_21 {
    public static void main(String[] args) {
        String[] literals = {"5_2534e+1", "_2534", "5_2", "5"};

        System.out.println("字面量验证结果:");
        System.out.println("================");

        for (String literal : literals) {
            boolean isValid = validateLiteral(literal);
            System.out.printf("%-10s -> %s%n", literal, isValid ? " 正确" : " 错误");

            if (isValid) {
                try {
                    // 尝试解析以验证类型
                    if (literal.contains("e") || literal.contains("E") || literal.contains(".")) {
                        double value = Double.parseDouble(literal.replace("_", ""));
                        System.out.printf("          类型: 浮点数, 值: %f%n", value);
                    } else {
                        int value = Integer.parseInt(literal.replace("_", ""));
                        System.out.printf("          类型: 整数, 值: %d%n", value);
                    }
                } catch (NumberFormatException e) {
                    System.out.println("          解析错误!");
                }
            }
        }

        // 额外演示一些合法的字面量
        System.out.println("\n其他合法的字面量示例:");
        String[] validExamples = {"123", "5_000", "1_234_567", "3.14", "1.5e3", "10F", "20L"};
        for (String example : validExamples) {
            System.out.printf("%-10s ->  正确%n", example);
        }
    }

    public static boolean validateLiteral(String literal) {
        try {
            // 检查是否以下划线开头 - 这是非法的
            if (literal.startsWith("_")) {
                return false;
            }

            // 检查是否以下划线结尾 - 这是非法的
            if (literal.endsWith("_")) {
                return false;
            }

            // 检查是否有连续的下划线 - 这是非法的
            if (literal.contains("__")) {
                return false;
            }

            // 尝试解析（去除下划线后）
            String cleanLiteral = literal.replace("_", "");

            // 检查是否包含e/E（科学计数法）或小数点
            if (cleanLiteral.toLowerCase().contains("e") || cleanLiteral.contains(".")) {
                // 尝试解析为浮点数
                Double.parseDouble(cleanLiteral);
                return true;
            } else {
                // 尝试解析为整数
                Integer.parseInt(cleanLiteral);
                return true;
            }
        } catch (NumberFormatException e) {
            return false;
        }
    }
}